/*
题目：复写零
给你一个长度固定的整数数组 arr，请你将该数组中出现的每个零都复写一遍，并将其余的元素向右平移。

注意：请不要在超过该数组长度的位置写入元素。

要求：请对输入的数组 就地 进行上述修改，不要从函数返回任何东西。
https://leetcode.cn/problems/duplicate-zeros
 */
public class DuplicateZeros {
    public void duplicateZeros(int[] arr) {
        int i = 0;
        int top = 0;
        int len = arr.length;

        while (top < len) {
            if (arr[i] == 0) {
                top += 2;
            } else {
                top++;
            }
            i++;
        }
        i--;  //让i重新指向“最后一个元素”

        //如果最后处理的元素为0
        int index = len - 1;
        if (top == len + 1) {
            arr[index--] = arr[i--]; //由于最后一个处理的元素是0，所以这个零不需要复写
        }

        while (i >= 0) {
            if (arr[i] != 0) {
                arr[index--] = arr[i--];
            } else {
                arr[index--] = 0;
                arr[index--] = 0;
                i--;
            }
        }
    }
}
